Ubuntu Linux
Ubuntu Linux
一、Linux Shell
1 简介
Shell接收用户指令,并协助用户完成与系统内核的交互,进而完成指令的执行。Bash就是一种代表性的Shell命令解释程序。
2 命令行
打开命令行界面:
- 组合键:Ctrl + Alt + T
- 界面点击终端。
- 路径:
/user/bin/gnome-terminal
命令行提示:
[当前用户名@主机名 当前目录] 提示符
- ~:当前登入用户的主目录
- $:普通用户的终端
- #:root用户的终端
# 改变Shell的工作目录 |
3 查看Shell
# 查看当前使用的Shell程序 |
4 命令
4.1 含义
命令 [选项] [参数]
短命令选项前通常用 ‘ - ‘,长命令选项前通常用 ‘ — ‘。
4.2 root权限
# 临时切换到root账户,执行su后输入密码 |
4.3 电源操作
# 重启 |
4.4 查看信息
# 输出当前工作目录的名称 |
4.5 历史命令
查看历史命令。
命令只要与上一条不相同,无论是否运行成功,都会加入到历史记录中。
箭头(上,下)查询上一条和下一条命令。
history [选项] |
5 功能
tab:自动补全。
Ctrl + C:强制中断。
6 高阶技巧
6.1 管道
在两个命令之间设置管道时,管道符左边命令的输出就变成了右边命令的输入。
命令1 | 命令2 ...| 命令n
6.2 重定向
输入/输出重定向:改变输入与输出的方向。
Linux中标准输入设备是键盘,标准输出设备是显示器。
ID:文件描述符。
ID | 文件名 | 类型 | 硬件 |
---|---|---|---|
0 | stdin | 标准输入文件 | 键盘 |
1 | stdout | 标准输出文件 | 显示器 |
2 | stderr | 标准错误输出文件 | 显示器 |
# 输出重定向 |
6.3 命令排列
命令 | 作用 | ||
---|---|---|---|
; | 所有命令都被执行 | ||
&& | 前命令为真才执行后命令 | ||
\ | \ | 前命令为假才执行后命令 | |
\ | 前命令作为后命令的参数 | ||
& | 多条命令在后台执行 |
6.4 命令续航
# 1.转义符(输出为$zp) |
6.5 命令替换
将一个命令的结果作为命令的参数。
命令执行后的结果作为字符串保存在res中。
`
为反引号,在键盘esc的正下方。
# 使用 |
6.6 命令别名
# 定义 |
6.7 命令帮助系统
# 使用 |
二、文件和目录管理
1 目录结构
/proc
: 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
路径 | 作用 |
---|---|
/bin | bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令 |
/boot | 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件 |
/dev | dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的 |
/etc | etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录 |
/home | 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve |
/lib | lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库 |
/lost+found | 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件 |
/media | linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下 |
/mnt | 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了 |
/opt | opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的 |
/proc | proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 |
/root | 该目录为系统管理员,也称作超级权限者的用户主目录 |
/sbin | s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序 |
/selinux | 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的 |
/srv | 该目录存放一些服务启动之后需要提取的数据 |
/sys | 这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs。sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建 |
/tmp | tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的 |
/usr | usr 是 unix shared resources(共享资源)的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录 |
/usr/bin | 系统用户使用的应用程序 |
/usr/sbin | 超级用户使用的比较高级的管理程序和系统守护程序 |
/usr/src | 内核源代码默认的放置目录 |
/var | var 是 variable(变量)的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件 |
/run | 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run |
2 文件类型
查看文件类型:
ls -l [ file ] || ll
文件类型标识 | 文件类型 |
---|---|
- | 常规文件 |
d | 目录文件 |
f | 文件 |
b | 块设备 |
c | 串行端口 |
l | 链接文件 |
p | 进程文件 |
s | 套接字文件 |
# 案例: |
3 目录管理
3.1 一般参数
参数 | 意义 |
---|---|
-i | 询问 |
-f | 不询问 |
-v (—verbose) | 提示 |
-r | 递归子 |
-p | 递归父 |
3.2 touch
创建新文件或修改文件属性。
touch -para <file> |
3.3 cp
复制文件或目录。
# 源可以是多个,目的只有最后一个(有多个源的话目的要是目录) |
3.4 ln
创建链接文件
# ln 参数 链接目标 链接 |
3.5 mv
移动文件或目录
mv可以用来改名改名。
# mv [选项] [源文件|目录] [目标文件|目录] |
3.6 rm
删除文件或目录
#rm [选项] [文件|目录] |
4 目录操作
4.1 pwd
(print working directory)显示当前工作目录路径 。
pwd |
4.2 cd
改变工作目录
.
:当前目录。..
:当前目录的父目录。~
:当前用户的主目录。
# cd [目录] |
4.3 ls
列出目录下的档案或目录
# ls [选项] [目录|文件] |
4.4 mkdir
创建指定名称的目录
# mkdir [选项] 目录... |
4.5 rmdir
删除目录
# rmdir [选项] [目录名] |
三、用户与用户组
1 用户账户
用户账户UID定义
- 超级用户root:UID = 0
- 系统用户:1 < UID < 999
- 普通用户:UID > 1000
# 用户账户文件 |
2 用户命令
# useradd | adduser (Ubuntu) 添加用户 |
3 用户组账户
用户组账户GID定义同理用户UID定义
# 用户组账户文件 |
4 用户组命令
# groupadd | addgroup(Ubuntu) 添加组 |
四、磁盘分区
1 定义
磁盘分区:
- 将一个磁盘驱动器分成若干个逻辑驱动器
- 磁盘的分区信息保存在分区表中。分区表是一个磁盘分区的索引
- MBR ( master boot record ) 主分区引导记录
- GPT ( globally unique identifier partition table ) GUID分区表
- GPT相对于MBR突出的优势是GPT可管理空间大、支持的分区数量多
格式化:格式化会情况现有分区的所有数据并创造一些系统文件
命名方式:sda sdb sdc … (依照设备ID)
2 查看设备列表
ls /dev/sd*
3 fdisk
磁盘分区(分区 > 2 TB使用parted命令)
# fdisk 命令参数带-,否则进入交互界面(交互界面用命令不带 -) |
4 mkfs
创建文件系统
创建了文件系统才可以挂载
# mkfs [选项][-t <类型>][文件系统选项]<设备>[<大小>] |
5 mount/umount
磁盘分区挂载与卸载
# mount [-t文件系统类型][-L 卷标][-o 挂载选项]设备名 挂载点 |
6 fsck
文件系统的检查和修复
# fsck [选项][设备名] |
7 df
查看磁盘使用情况
# df [选项][文件名] |
8 du
查看文件和目录磁盘使用情况
# du [选项][文件] |
五、进程管理
1 查看
1.1 ps
静态监控
1.2 pstree
查看进程树
1.3 top
动态监控
-p pid # 指定pid |
1.4 lsof
列出进程打开的文件的信息,端口号,网络活动。
-i:port # 端口活动 |
1.5 pidof
查看进程pid
# pidof [选项][进程名] |
2 控制
2.1 nice
调整即将运行的进程优先级
NI:nice值越高表示高友善度,低优先级。(不能完全决定进程优先级)
PRI:PRI( new ) = PRI ( old ) + NI ,同理NI。
# nice [命令][进程名] |
2.2 renice
调整运行的进程的优先级
# renice [-n] <优先级> [ -p/-g/-u ] <pid/gpid/user> |
2.3 kill
发送指定信号给进程
# kill [ -s 信号声明|-n 信号编号|-信号声明]进程号|任务声明 ... |
2.4 killall
杀死指定名字的进程
# killall [选项][进程号] |
3 生命
3.1 启动
vi # 前台启动 |
3.2 挂起
ctrl + z # 挂起 |
3.3 jobs
显示任务状态
# jobs [选项][任务声明 ...] |
3.4 fg 将任务移至前台
fg [ %N ]
将任务N移至前台。N是通过
jobs
命令查到的后台任务编号。(不是pid)。不指定则Shell程序中的“当前任务”将会被使用。
3.5 bg 将任务移至后台
bg [ %N ]
将任务N移至后台。N是通过
jobs
命令查到的后台任务编号。(不是pid)不指定则Shell程序中的“当前任务”将会被使用。
3.6 nohup
启动脱离终端运行的任务
六、软件包管理
1 备份
# 备份 |
2 指令
# apt -> apt-get |
3 无法定位软件包
# root打开 |
七、补充命令
1 系统操作
1.1 shutdown
立刻关机
# 立刻关机 |
1.2 nautilus + 目录名称
打开目录
nautilus <path>
2 文件操作
2.1 umask
指定在建立文件时预设的权限掩码
2.2 wc
用于计算字数
-c # 显示字节 |
2.3 cat
concatenate,命令用于连接文件并打印到标准输出设备上
2.4 type
判断文件类型
2.5 grep
用于查找文件里符合条件的字符串
# 使用 |
2.6 tail
用于查看文件的内容
2.7 find
用来在指定目录下查找文件
# 查找指定路径下的文件 |
3 用户操作
3.1 id
用于显示用户的ID,以及所属群组的ID
3.2 chmod
控制用户对文件的权限的命令
4 网络操作
4.1 ip查看
# ip地址 |
5 \ + 系统命令
会使用系统原本自带的命令而不是命令的别名。(不加会优先使用别名)
八、Shell编程
1 头文件
默认 #! /bin/bash
表示使用哪一种shell执行,可以修改。
创建脚本有 vi/vim gedit
# 是注释
2 运行方式
命令 | 作用 |
---|---|
chmod +x name.sh | 为脚本添加可执行权限,然后直接运行。该方法运行可以是绝对路径可以是相对路径(相对路径: ./ ) |
bash name.sh | 或者sh name.sh,运行脚本 |
source name.sh | 或者. name.sh:直接运行,但是在terminal下值是静态的 |
3 变量
set:设置
unset:删除
expr:表达式计算:
expr $a + $b
let:直接计算:
let x+=1
# 变量定义 |
4 交互
# 标准化输出 |
5 条件判断
if condition |
6 循环
# C语言 |
7 函数
return 返回值:一般不用return返回函数中的值(容易出错)。一般用
$?
# 定义函数 |
8 运算符
对于括号外的逻辑运算符是:
&&
和||
数值比较运算符 | 作用 |
---|---|
-eq -ne | 等于,不等于 |
-gt -ge (Greater than it) | 大于,大于等于 |
-lt -le(less than it) | 小于,小于等于 |
逻辑运算符 | 作用 |
---|---|
! | 非 |
-o | 或 |
-a | 与 |
字符串检测运算符 | 作用 |
---|---|
= | 等于 |
!= | 不等于 |
-z | 长度为0 |
-n | 长度不为0 |
$ | 为空 |
文件测试运算符 | 作用 |
---|---|
-b | 检测文件是否是块设备文件 |
-c | 检测文件是否是字符设备文件 |
-d | 检测文件是否是目录文件 |
-f | 检测文件是否是普通文件(既不是目录也不是设备文件) |
-g | 检测文件是否设置了SGID位 |
-k | 检测文件是否设置了粘着位(stucky Bit) |
-p | 检测文件是否具名管道 |
-u | 检测文件是否设置了SUID位 |
-r | 检测文件是否可读 |
-w | 检测文件是否可写 |
-x | 检测文件是否可执行 |
-s | 检测文件是否为不为空(文件大小是否不为0) |
-e | 检测文件(包括目录)是否存在 |
-a | 检测文件(包括目录)是否存在 |
-S | 检测文件是否是套接字 |
-L | 检测文件是否存在并且是一个符号链接 |
九、GCC
1 vi/vim编辑
命令模式命令 | 作用 |
---|---|
:w | 保存 |
:q | 退出 |
编辑模式命令 | 作用 |
---|---|
i | 进入编辑 |
esc | 退出编辑 |
2 安装gcc
# 查看依赖关系 |
3 GCC编译
编译会重编译源文件,所以对于复杂项目来说未改动的源文件不需要再编译
# 编译流程 |
4 gdb调试
gcc -g main.c
编译出的文件才可以被调试
命令 | 作用 |
---|---|
l ( list ) | 显示代码;list 行号——显示当前文件以“行号”为中心的前后10行代码;list 函数名——显示“函数名”所在函数的源代码。 |
b n( break ) | 设置端点,参数为行数或函数名;也可用“文件名:行数”或“文件名:函数名” |
tb n( tbreak ) | 临时端点,参数同b |
info b [ n ] ( i b/info break ) | 查看断点 |
info program | 查看程序是否正在运行,程序进程号,被暂停的原因 |
clear n | 清除第n行断点 |
d n ( delete ) | 删除第n个断点 |
disable n | 暂停第n个断点 |
enable n | 开启第n个断点 |
r ( run ) | 执行程序 |
s ( step ) | 有函数进入函数,无则单步执行 |
n ( next ) | 单步执行,不进入函数 |
c ( continue ) | 继续执行程序 |
p n( print ) | 打印表达式;表达式:变量,操作或函数调用 |
until | 可以运行程序直到退出循环体 |
finish | 运行程序(直到当前函数完成返回),并打印函数返回时的堆栈地址和返回值及参数等信息 |
watch n | 设置监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序 |
frame n | 移动到指定的帧栈,并打印栈的信息;n为帧编号,不指定n则打印当前栈的信息 |
set args n | 指定运行时的参数 |
show args | 查看设置好的参数 |
show paths | 查看程序运行路径;set environment varname [ = value]设置环境变量;用show environment [ varname ]查看环境变量 |
cd / pwd | 切换/显示路径 |
shell xxx | 执行shell命令行,xxx为shell命令 |
bt ( backtrace) | 查看堆栈;最下面是先执行的函数 |
threads | 查看所有线程 |
thread n | 切换线程,参数为线程号;线程号用threads查看(流程:threads——thread n——bt) |
condition | 给断点设置触发条件,如(b 10 if a > b ( condition 1 if a > b ) 等价 ( 假设b 10的断点号为1) );取消用condition 断点号 |
ignore | 特殊断点条件,程序只有到达该断点指定次数后才会触发。如ignore 1 10(断点号1的断点过10次后触发) |
kill | 强行终止当前在调试的程序 |
help | 帮助 |
call 函数(参数) | 调用函数 |
layout | 用于分割窗口。 |
layout src | 显示源代码窗口 |
layout asm | 显示反汇编窗口 |
layout regs | 显示源代码/反汇编和CPU寄存器窗口 |
layout split | 显示源代码和反汇编窗口 |
display | 每次单步执行后输出被设置的表达式及值 |
stepi / nexti | 单步跟踪一些机器指令 |
Ctrl + L | 刷新窗口 |
q ( quit ) | 退出gdb |
5 make 和 Makefile
生成Makefile文件
输入:
`target… : prerequisties …command ...`
command前必须是tab而不是空格。
如果prerequisties中有一个以上的文件比target文件要新,command中定义的东西就会被执行。
# 为注释,# 为输出井号。\可以换行,后面不可以接空格
执行:
make编译Makefile
执行clean:make clean
# 例子 |
6 Autotools 和 make 使用
十、Linux高级应用
人工智能
区块链
大数据